'''
Created on 2017年6月10日

@author: Administrator
'''

'''
递归：从原理来说就是函数调用自身这么一个行为，函数内部你可以调用所有可见的函数
def  recurision():
     recurision()

console:
runtimeError:maximum recursion depth exceeded

从理论上讲：这个方法会永远执行下去，知道耗尽你的所有内存资源，不过python3出于善意的保护
对递归的深度默认为 100层，但如果 写网络爬虫等工具，可能会爬的很深，可以手动设置递归深度限制
 import sys
 sys.setrecurisionlimit(1000000) #将递归限制设置为100万层
注意：递归的实现是不停调用自己每次函数的调用都需要进行压栈，弹栈保存和恢复寄存器的栈操作，所以
递归是非常消耗时间和空间
另外一旦递归忘记了返回，或者设计了错误的返回条件，那么递归会变成一个无底洞，只进不出，所以在写递归
时候 ，记住口诀：递归递归，归去来兮。

递归的两个条件：
            1.调用函数本身
            2.设置正确返回条件

'''

'''
演示递归版本
'''
def factorail(n):
    if n==1:
        return 1
    else:
        return n*factorail(n-1)

'''
普通方法实现求阶乘

'''
def recursion(n):
    number=n
    for i in range(1,n):
        number*=i
    return number



if __name__ == '__main__':
    number=int(input("输入正整数"))
    result=factorail(number)
    print("%d的阶乘是 %d" %(number,result))